// 启动聊天的服务端程序
const app = require('express')()
const server = require('http').Server(app)
const io = require('socket.io')(server)

// 记录所有已经登录过的用户
const users = []
server.listen(3000, () => {
  console.log('服务器启动成功---http://127.0.0.1:3000');
})
app.use(require('express').static('public'))

// express处理静态资源
// 把public目录设置为静态资源目录
app.get('/', function(req, res) {
	res.redirect('/index.html')
})

io.on('connection', socket => {
	// 每个用户都有自己socket
	socket.on('login', data => {
		console.log(data)
		// 判断，如果data在users中存在，说明该用户已经登录了，不允许登录
		// 如果data在users中不存在，说明该用户没有登录，允许登录
		let user = users.find(item => item.username === data.username)
		if (user) {
			//表示用户存在
			socket.emit('loginError', {msg:'登录失败'})
			console.log('登录失败')
		} else {
			//表示用户不存在
			users.push(data)
			socket.emit('loginSuccess', data)

			// 告诉所有用户，有用户加入到了聊天室，广播消息
			// socket.emit 告诉当前用户
			// io.emit 广播事件
			io.emit('addUser', data)

			// 告诉所有用户，目前聊天室中有多少人
			io.emit('userList', users)

			// 把登录成功用户名头像存储起来
			socket.username = data.username
			socket.avatar = data.avatar

		}
	})

	// 用户断开连接的功能
	socket.on('disconnect', () => {
		// 把当前用户的信息从users中删除
		let idx = users.findIndex(item => item.username === socket.username)
		users.splice(idx, 1)
		// 1.告诉所有人，有人离开了聊天室
		io.emit('delUser', {
			username: socket.username,
			avatar: socket.avatar
		})
		io.emit('userList', users)
		// 2.告诉所有人,userList发生更新
	})

	// 监听聊天消息
	socket.on('sendMsg', data => {
		io.emit('receiveMsg', data)
	})
	socket.on('sendImg', data => {
		io.emit('receiveImg', data)
	})
})
